// 版权归Go作者所有。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

// 开始：构建aix | | |达尔文| |蜻蜓| | freebsd | | linux | | netbsd | openbsd | solaris
// +构建aix darwin dragonfly freebsd linux netbsd openbsd solaris

package modload

import (
	"io/fs"
	"os"
	"syscall"
)

// hasWritePerm报告当前用户是否具有向服务器写入的权限
// 用给定的信息归档。
// None
// 尽管大多数Unix系统上的root用户即使没有
// 权限，如果未指定适当的权限位，hasWritePerm将报告false
// 即使当前用户是root用户也要设置。
func hasWritePerm(path string, fi fs.FileInfo) bool {
	if os.Getuid() == 0 {
		// 根用户可以访问任何文件，但我们仍然希望默认为
		// 只读模式，如果go.mod文件被标记为全局不可写。
		// （如果用户真的不想处于只读模式，他们可以
		// 显式传递-mod=mod。）
		return fi.Mode()&0222 != 0
	}

	const W_OK = 0x2
	return syscall.Access(path, W_OK) == nil
}
